home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Freelog 125
/
Freelog_MarsAvril2015_No125.iso
/
Musique
/
Quod Libet
/
quodlibet-3.3.0-installer.exe
/
bin
/
quodlibet
/
qltk
/
tracker.pyc
(
.txt
)
< prev
next >
Wrap
Python Compiled Bytecode
|
2014-12-31
|
7KB
|
181 lines
# Source Generated with Decompyle++
# File: in.pyc (Python 2.7)
import os
import time
from gi.repository import GObject, GLib
from quodlibet import config
from quodlibet import const
class TimeTracker(GObject.GObject):
'''Emits tick every second (with up to one second jitter) as long
as the player is activly playing.
Uses timeout_add_seconds, so multiple instances of this should
sync and not produce more wakeups.
'''
__gsignals__ = {
'tick': (GObject.SignalFlags.RUN_LAST, None, ()) }
def __init__(self, player):
super(TimeTracker, self).__init__()
self._TimeTracker__player = player
self._TimeTracker__id = None
self._TimeTracker__sigs = [
player.connect('paused', self._TimeTracker__paused),
player.connect('unpaused', self._TimeTracker__unpaused)]
def destroy(self):
for signal_id in self._TimeTracker__sigs:
self._TimeTracker__player.disconnect(signal_id)
self._TimeTracker__source_remove()
def __source_remove(self):
if self._TimeTracker__id is not None:
GLib.source_remove(self._TimeTracker__id)
self._TimeTracker__id = None
def __update(self):
if self._TimeTracker__stop:
self._TimeTracker__source_remove()
return False
None.emit('tick')
return True
def __paused(self, *args):
self._TimeTracker__stop = True
def __unpaused(self, *args):
self._TimeTracker__stop = False
if self._TimeTracker__id is None:
self._TimeTracker__id = GLib.timeout_add_seconds(1, self._TimeTracker__update)
class SongTracker(object):
def __init__(self, librarian, player, pl):
self._SongTracker__player_ids = [
player.connect('song-ended', self._SongTracker__end, librarian, pl),
player.connect('song-started', self._SongTracker__start, librarian)]
self._SongTracker__player = player
timer = TimeTracker(player)
timer.connect('tick', self._SongTracker__timer)
self.elapsed = 0
self._SongTracker__to_change = set()
self._SongTracker__change_id = None
def destroy(self):
for id_ in self._SongTracker__player_ids:
self._SongTracker__player.disconnect(id_)
self._SongTracker__player = None
if self._SongTracker__change_id:
GLib.source_remove(self._SongTracker__change_id)
self._SongTracker__change_id = None
def __changed(self, librarian, song):
self._SongTracker__to_change.add(song)
if self._SongTracker__change_id is not None:
GLib.source_remove(self._SongTracker__change_id)
self._SongTracker__change_id = None
def idle_change():
librarian.changed(list(self._SongTracker__to_change))
self._SongTracker__to_change.clear()
self._SongTracker__change_id = None
self._SongTracker__change_id = GLib.idle_add(idle_change, priority = GLib.PRIORITY_LOW)
def __start(self, player, song, librarian):
self.elapsed = 0
if song is not None:
if song.multisong:
song['~#lastplayed'] = int(time.time())
song['~#playcount'] = song.get('~#playcount', 0) + 1
else:
config.set('memory', 'song', song['~filename'])
song['~#laststarted'] = int(time.time())
self._SongTracker__changed(librarian, song)
else:
config.set('memory', 'song', '')
def __end(self, player, song, ended, librarian, pl):
if song is not None and not (song.multisong):
if ended:
config.set('memory', 'seek', player.get_position())
else:
config.set('memory', 'seek', 0)
if self.elapsed > 0.5 * song.get('~#length', 1):
song['~#lastplayed'] = int(time.time())
song['~#playcount'] = song.get('~#playcount', 0) + 1
self._SongTracker__changed(librarian, song)
elif pl.current is not song:
if not player.error:
song['~#skipcount'] = song.get('~#skipcount', 0) + 1
self._SongTracker__changed(librarian, song)
else:
config.set('memory', 'seek', 0)
def __timer(self, timer):
self.elapsed += 1
class FSInterface(object):
'''Provides a file in ~/.quodlibet to indicate what song is playing.'''
def __init__(self, player):
self._player = player
self._ids = [
player.connect('song-started', self._FSInterface__started),
player.connect('song-ended', self._FSInterface__ended)]
def destroy(self):
for id_ in self._ids:
self._player.disconnect(id_)
try:
os.unlink(const.CURRENT)
except EnvironmentError:
pass
def __started(self, player, song):
if song:
try:
f = file(const.CURRENT, 'w')
except EnvironmentError:
pass
f.write(song.to_dump())
f.close()
def __ended(self, player, song, stopped):
try:
os.unlink(const.CURRENT)
except EnvironmentError:
pass